home *** CD-ROM | disk | FTP | other *** search
- bbs> Msg# 72676 To: ATARI @ALLE From: DG3YFU Date: 30Aug90/1352
- Subject: 2TNC Switch/ACC&PRG
- Bulletin ID: 308004DB0SHG
- Path: DB0IE!DB0GV!DB0EAM!DB0KG!DK0MAV!DB0SHG
- de DG3YFU @ DB0SHG
-
- Das Programm kann sowohl als ACC wie auch als PRG benutzt werden. Es wird
- dabei DTR zur TNC Umschaltung benutzt. Es sollte mit (fast) jedem Assembler
- zu überstzen sein, (Devpack,MadMac,Skeka..).
- ;************************************************************************
- ;* Ein kleines Programm Ulschalten der TNC's *
- ;* Das Programm läuft als ACC & PRG (nur umbenennen!). *
- ;************************************************************************
-
- appl_init EQU $0A000100
- menu_register EQU $23010101 ;Auszug aus der GEM-Library
- evnt_mesag EQU $17000101
- form_alert EQU $34010101
-
- TEXT
-
- start: move.l A0,D0 ;Zeiger auf die Basepage, wenn ACC
- bne.s start1 ;0<> kein ACC =>
- st app ;-1=PRG (0 steht für ACC)
- move.l 4(SP),D0 ;Basepage vom Stack holen
- start1:
- lea own_stack(PC),SP ;Eigenen Stack einrichten (für ACC nötig!)
-
- pea ende-start+$0100.w ;Programmlänge
- move.l D0,-(SP) ;Basepageadr des Starters
- move.l #$4A0000,-(SP)
- trap #1 ;Setblock()
- lea 12(SP),SP
-
- move.l #appl_init,D0
- bsr.w aes ;appl_init()
- lea addr_in(PC),A6
- lea int_in(PC),A5 ;zwei globale Variablen
-
- btst #7,app(PC) ;PC-relative-Adressierung
- bne.s do_it ;wenn PRG direkt starten
-
- move.w D0,(A5) ;appl_id
- lea acc_name(PC),A0
- move.l A0,(A6)
- move.l #menu_register,D0
- bsr.w aes ;menu_register()
-
- ;************************************************************************
- ;* Die Hauptschleife des ACCs *
- ;************************************************************************
-
- mainloop: lea evnt_buff(PC),A0
- move.l A0,(A6)
- move.l #evnt_mesag,D0
- bsr.w aes ;evnt_mesag()
- moveq #40,D0
- cmp.w (A0),D0
- bne.s mainloop ;ACC_OPEN?
-
- do_it: move.w #14,-(sp) ;get TNC Status
- move.w #0,-(sp)
- move.w #28,-(sp)
- trap #14
- addq.l #6,sp
- move.w #1,TNCaktiv
- and.w #16,d0
- beq.s goon0
- move.w #2,TNCaktiv
- goon0 ;
- move.w #3,d0
- sub.w TNCaktiv,d0
- move.w d0,(A5)
- move.w TNCaktiv,d0
- add.w #47,d0
- move.b d0,TNCnumm
- lea acc_alert(PC),A0
- move.l A0,(A6)
- move.l #form_alert,D0
- bsr.s aes ;form_alert()
- ;
- cmp.w #2,d0
- beq.s goon1
- move.w #$ffff-16,-(sp) ;Setze TNC 0
- move.w #29,-(sp)
- trap #14
- addq.l #4,sp
- bra.s goon2
- goon1 move.w #16,-(sp) ;Setze TNC 1
- move.w #30,-(sp)
- trap #14
- addq.l #4,sp
- ;
- goon2 btst #7,app(PC)
- beq.w mainloop ;wenn ACC in die Event-Schleife zurück
- clr.w -(SP)
- trap #1 ;sonst Pterm0()
-
- ;************************************************************************
- ;* Mein eigener kleiner AES-Aufruf *
- ;* D0=Die ersten 4 Einträge im int_in-Array (Bytebreite!) *
- ;************************************************************************
-
- aes: movem.l D1-A6,-(SP)
- lea contrl(PC),A0
- clr.l (A0)
- clr.l 4(A0) ;int_in-Array löschen
- movep.l D0,1(A0) ;und die neuen Daten eintragen
- lea aes_para_blk(PC),A0
- move.l A0,D1
- move.w #$C8,D0
- trap #2 ;AES aufrufen
- move.w int_out(PC),D0
- movem.l (SP)+,D1-A6
- rts
-
- ;************************************************************************
- ;* Nun ein paar wichtige Daten *
- ;************************************************************************
-
- DATA
-
- TNCaktiv DC.W 1
-
- aes_para_blk: DC.L contrl
- DC.L global
- DC.L int_in
- DC.L int_out
- DC.L addr_in
- DC.L addr_out
-
- acc_name: DC.B ' TNC Switcher',0
- acc_alert: DC.B '[0][TNC-Umschaltung |'
- DC.B 'z.Zt.aktiv TNC'
- TNCnumm: DC.B 'X][TNC0|TNC1]',0
-
- ;************************************************************************
- ;* Und ordentlich Zwischenspeicher *
- ;************************************************************************
-
- BSS
-
- global: DS.W 15
- contrl: DS.W 5
- int_in: DS.W 16
- int_out: DS.W 7
- addr_in: DS.L 2
- addr_out: DS.L 1
- evnt_buff: DS.W 8
- app: DS.W 1 ;0=ACC, -1=PRG
- DS.L 128 ;jedem Programm seinen eigenen Stack
-
- own_stack: DS.L 0
-
- ende: END
-
- ;************************************************************************
- Das Programm sollte etwa 400 Bytes lang werden (sehr kompakt) und je nach
- Namen als PRG oder ACC laufen.
- 73 de DG3YFU @ DB0EAM
-
-